import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;

public class CodeManager {
	  
	  private StringBuffer contents;
	  
	  private int posActual = 0;
	  private int lineaActual = 0;


	  public CodeManager() {
	    contents = new StringBuffer();
	  }

	  public int getPosActual(){
	    return posActual;
	  }

	  public int getLineaActual(){
	    return lineaActual;
	  }

	  public StringBuffer getContent(){
	    return contents;
	  }

	  /*DEVUELVE EL PROXIMO CARACTER EN LA LINEA DE CODIGO
	    SI ES UN  SALTO DE LINEA INCREMENTA EL NUMERO DE LINEA
	    Y SIEMPRE INCREMENTA LA POSICION*/
	  public char nextChar(){
	    char ch = contents.charAt(posActual++);
	    if (ch == '\n')
	      lineaActual++;
	    return ch;
	  }

	  /*MUEVE EL CURSOR UNA POSICION ATRAS, SI ENCUENTRA UN SALTO
	    DE LA LINEA RESTA UNO AL VALOR DE LA LINEA ACTUAL*/
	  public void backCursor(){
	    posActual--;
	    if (contents.charAt(posActual) == '\n')
	      lineaActual--;
	  }

	  public void LoadFromFile(String FilePath){
	    LoadFileToBuffer(new File(FilePath));
	  }

	  /*CARGA EL CODIGO LEIDO DESDE UN ARCHIVO DE TEXTO Y
	    LO ALMACENA EN UN BUFFER PARA IR LEYENDO DE A CARACTERES*/
	  public void LoadFileToBuffer(File aFile) {
	    BufferedReader input = null;
	    try {
	      input = new BufferedReader( new FileReader(aFile) );
	      String line = null;
	      while (( line = input.readLine()) != null){
	        contents.append(line);
	        contents.append(System.getProperty("line.separator"));
	      }
	      contents.append("$");
	    }
	    catch (FileNotFoundException ex) {
	      ex.printStackTrace();
	    }
	    catch (IOException ex){
	      ex.printStackTrace();
	    }
	    finally {
	      try {
	        if (input!= null) {
	          input.close();
	        }
	      }
	      catch (IOException ex) {
	        ex.printStackTrace();
	      }
	    }
	  }

	  /*ACA SE CARGA EL CONTENTS CON LA INFORMACION ACTUAL EN EL EDITOR DE TEXTO*/
	  public void LoadFromText(String code){
	    contents = new StringBuffer();
	    posActual = 0;
	    lineaActual = 0;
	    contents.append(code);
	    contents.append("$");
	  }
}
